package cn.xhy.material.service.pojectinfo;


import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.xhy.material.controller.admin.pojectinfo.vo.PojectInfoPageReqVO;
import cn.xhy.material.controller.admin.pojectinfo.vo.PojectInfoSaveReqVO;
import cn.xhy.material.dal.dataobject.pojectinfo.ContractDO;
import cn.xhy.material.dal.dataobject.pojectinfo.CustomerProjectDO;
import cn.xhy.material.dal.dataobject.pojectinfo.PojectInfoDO;

import javax.validation.*;
import java.util.List;


/**
 * 项目信息 Service 接口
 *
 * @author xhy
 */
public interface PojectInfoService {

    /**
     * 创建项目信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createPojectInfo(@Valid PojectInfoSaveReqVO createReqVO);

    /**
     * 更新项目信息
     *
     * @param updateReqVO 更新信息
     */
    void updatePojectInfo(@Valid PojectInfoSaveReqVO updateReqVO);

    /**
     * 删除项目信息
     *
     * @param id 编号
     */
    void deletePojectInfo(Long id);

    /**
     * 获得项目信息
     *
     * @param id 编号
     * @return 项目信息
     */
    PojectInfoDO getPojectInfo(Long id);

    /**
     * 获得项目信息分页
     *
     * @param pageReqVO 分页查询
     * @return 项目信息分页
     */
    PageResult<PojectInfoDO> getPojectInfoPage(PojectInfoPageReqVO pageReqVO);

    // ==================== 子表（销售合同） ====================

    /**
     * 获得销售合同列表
     *
     * @param projectInfoId 项目信息id标识
     * @return 销售合同列表
     */
    List<ContractDO> getContractListByProjectInfoId(Integer projectInfoId);

    // ==================== 子表（客户和项目关系） ====================

    /**
     * 获得客户和项目关系列表
     *
     * @param projectId 项目ID
     * @return 客户和项目关系列表
     */
    List<CustomerProjectDO> getCustomerProjectListByProjectId(String projectId);

}
